package View;

import java.awt.BorderLayout;
import java.awt.Dialog.ModalExclusionType;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.JLabel;
import javax.swing.JTextField;

import Controller.ControladorOrden;
import Model.DetalleOrden;
import Model.Orden;
import Model.Product;

public class ProcesarOrdenes extends JDialog {

	private JPanel contentPane;
	private JTable table;
	private TableModel tmodelo;
	protected Product productoSeleccionado;
	private JTextField textFieldProducto;
	private JTextField textFieldCantidad;
	private JTextField textFieldTotal;
	private List<DetalleOrden> datos = new ArrayList<DetalleOrden>();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ProcesarOrdenes frame = new ProcesarOrdenes();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private void actualizarModelo(JTable table) {
		ControladorOrden cont = new ControladorOrden();
		
		tmodelo = new AbstractTableModel() {
			private static final long serialVersionUID = 1L;

			@Override
			public int getColumnCount() {
				return 5;
			}

			@Override
			public String getColumnName(int col) {
				switch (col) {
				case 0:
					return "CodigoProducto";
				case 1:
					return "NombreProducto";
				case 2:
					return "Cantidad";
				case 3:
					return "Precio";
				case 4:
					return "Iva";
				}	
				return null;
			}

			@Override
			public int getRowCount() {
				return datos.size();
			}

			@Override
			public Object getValueAt(int row, int col) {
				DetalleOrden obj = datos.get(row);
				switch (col) {
				case 0:
					return obj.getPro().getCodProd();
				case 1:
					return obj.getPro().getNombre();
				case 2:
					return obj.getCantidad();
				case 3:
					return obj.getMonto();
				case 4:
					return obj.getIva();
				}
				return null;
			}
		};

		table.setModel(tmodelo);
	}
	
	/**
	 * Create the frame.
	 */
	public ProcesarOrdenes() {
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 540, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JButton btnDel = new JButton("Del");
		btnDel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (table.getSelectedRowCount() != 0) {
					datos.remove(table.getSelectedRow());
					actualizarModelo(table);
				}
			}
		});
		btnDel.setBounds(101, 216, 62, 23);
		contentPane.add(btnDel);

		JButton btnClose = new JButton("Close");
		btnClose.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ProcesarOrdenes.this.dispose();
			}
		});
		btnClose.setBounds(173, 216, 62, 23);
		contentPane.add(btnClose);

		JScrollPane jScrollPane1 = new JScrollPane();
		contentPane.add(jScrollPane1);
		jScrollPane1.setBounds(24, 83, 433, 110);
		{
			table = new JTable();
			jScrollPane1.setViewportView(table);
			table.setBounds(49, 53, 288, 113);
		}
		
		JButton btnAdd = new JButton("Add");
		btnAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			 ControladorOrden cont = new ControladorOrden();
			 cont.insertar(new Date(), datos);
	
			}
		});
		btnAdd.setBounds(24, 216, 67, 23);
		contentPane.add(btnAdd);
		
		actualizarModelo(table);
		
		JLabel lblProducto = new JLabel("Producto");
		lblProducto.setBounds(24, 11, 46, 14);
		contentPane.add(lblProducto);
		
		textFieldProducto = new JTextField();
		textFieldProducto.setBounds(75, 8, 146, 20);
		contentPane.add(textFieldProducto);
		textFieldProducto.setColumns(10);
		
		JButton btnProd = new JButton("Prod");
		btnProd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ListadoProducto pro = new ListadoProducto(
						ProcesarOrdenes.this);
				pro.setModal(true);
				pro.setVisible(true);
				productoSeleccionado = pro.getProSelecionado();
				textFieldProducto.setText(productoSeleccionado.getNombre());
			}
		});
		btnProd.setBounds(229, 7, 55, 23);
		contentPane.add(btnProd);
		
		JLabel lblCantidad = new JLabel("Cantidad");
		lblCantidad.setBounds(24, 36, 46, 14);
		contentPane.add(lblCantidad);
		
		textFieldCantidad = new JTextField();
		textFieldCantidad.setBounds(75, 33, 55, 20);
		contentPane.add(textFieldCantidad);
		textFieldCantidad.setColumns(10);
		
		textFieldTotal = new JTextField();
		textFieldTotal.setBounds(382, 217, 75, 20);
		contentPane.add(textFieldTotal);
		textFieldTotal.setColumns(10);
		
		JLabel lblTotal = new JLabel("Total");
		lblTotal.setBounds(338, 220, 46, 14);
		contentPane.add(lblTotal);
		
		JButton btnAgregar = new JButton("Agregar");
		btnAgregar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				DetalleOrden det = new DetalleOrden();
				det.setCantidad(Integer.parseInt(textFieldCantidad.getText()));
				det.setIva(productoSeleccionado.getIva());
				det.setMonto(productoSeleccionado.getCost());
				det.setPro(productoSeleccionado);
				datos.add(det);
				actualizarModelo(table);
				textFieldProducto.setText("");
				textFieldCantidad.setText("");
				actualizarTotal();
			}
		});
		btnAgregar.setBounds(146, 32, 75, 23);
		contentPane.add(btnAgregar);
	}

	private void actualizarTotal() {
		double total = 0;
		for (DetalleOrden det : datos) {
			total += det.getCantidad() * det.getMonto() + det.getIva() * det.getCantidad();
		}
		textFieldTotal.setText(String.valueOf(total));
	}

}